export enum VerificationType {
    NONE = "",
    PHONE = "phone",
    EMAIL = "email",
}

export interface IForgetPasswordProps {
    /**
     * 重置密码成功后的重定向地址
     */
    redirect: string;

    /**
     * oem 配置
     */
    oemconfig?: { [key: string]: any };

    /**
     * 认证配置
     */
    authconfig?: { [key: string]: any };

    /**
     * 错误信息
     */
    error?: any;

    /**
     * 客户端类型
     */
    client_type?: string;

    /**
     * IE浏览器
     */
    isIE?: boolean;
}

export interface IForgetPasswordState {
    /**
     * 是否处于获取验证码界面
     */
    isVerifying: boolean;

    /**
     * 验证唯一标识
     */
    verificationId: string;

    /**
     * 验证的手机号或者邮箱值
     */
    verificationValue: string;

    /**
     * 使用的验证类型
     */
    verificationType: VerificationType;

    /**
     * 强密码最小长度
     */
    strongPasswordLength: number;

    /**
     * 支持的重置类型
     */
    sendVcodeType: SendVcodeType;

    /**
     * 更新验证码值
     */
    updateVerificationValue: (value: string) => void;

    /**
     * 更新验证唯一标识
     */
    updateVerificationId: (id: string) => void;

    /**
     * 发送验证码成功回调
     */
    sendVcodeSuccess: (id: string, type: VerificationType, value: string) => void;

    /**
     * 返回发送验证码界面
     */
    returnSendVcode: () => void;

    /**
     * 更新密码配置（强密码、重置密码）
     */
    updatePasswordConfig: () => void;

    [key: string]: any;
}

export interface SendVcodeType {
    sendVcodeBySMS: boolean;
    sendVcodeByEmail: boolean;
}

export interface ISendVerificationProps {
    /**
     * 全球化函数
     */
    t: any;
    /**
     * 返回按钮的重定向地址
     */
    redirect: string;
}

export interface ISendVerificationState {
    /**
     * 错误状态码
     */
    errorStatus: number;

    /**
     * 发送验证码
     */
    sendVcode: () => void;

    [key: string]: any;
}

export interface IResetPasswordProps {
    /**
     * 重置密码成功后的重定向地址
     */
    redirect: string;

    /**
     * 全球化函数
     */
    t: any;
}

export interface IResetPasswordState {
    /**
     * 输入验证码值
     */
    captcha: string;

    /**
     * 新密码
     */
    newPassword: string;

    /**
     * 确认新密码
     */
    confirmPassword: string;

    /**
     * 倒计时计数
     */
    count: number;

    /**
     * 错误状态码
     */
    errorStatus: number;

    /**
     * 错误信息
     */
    errorInfo: any;

    /**
     * 校验输入
     */
    checkInput: () => boolean;

    /**
     * 重置密码
     */
    reset: () => void;

    /**
     * 发送验证码
     */
    sendVcodeAgain: () => void;

    /**
     * 校验重置密码功能状态
     */
    checkSendVcodeStatus: () => boolean;

    [key: string]: any;
}
